#include <stdio.h>
int main()
{
	int n,t=0,i=0,j=0,num=1;
	scanf("%d",&n);
	int a[n][n];
	while(1)
	{
		if(i==t&&j!=n-1-t)
		{

			a[i][j]=num++;
			j++;
		} if(j==n-1-t&&i!=n-1-t)
		{	
			a[i][j]=num++;
			i++;
		} if(i==n-1-t&&j!=t)
		{	
			a[i][j]=num++;
			j--;
		} if(j==t&&i!=t)
		{	
			a[i][j]=num++;
			i--;
			if(i==t+1)
			{
				t++;
			}
		}
		if(n%2==0)
		{
			if(num==n*n+1)
			{
				break;
			}
		}else
		{
			if(num==n*n)
			{
				break;
			}
		}
	}
	if(n%2!=0)
	{
		a[n/2][n/2]=n*n;
	}
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			printf(" %2d",a[i][j]);
		}
		printf("\n");
	}
	return 0;
 } 
//上面的代码，是王某自己写的，下面的代码，是王某在洛谷看到此题，找到的比较棒的解析。
#include<bits/stdc++.h>
using namespace std;
int a[15][15];
int main()
{
	int n,k=1,x=1,y=0;;
	cin>>n;
	while (k<=n*n)
	{
		while(y<n&&!a[x][y+1])a[x][++y]=k++;
		while(x<n&&!a[x+1][y])a[++x][y]=k++;
		while(y>1&&!a[x][y-1])a[x][--y]=k++;
		while(x>1&&!a[x-1][y])a[--x][y]=k++;
	}
	for (int i=1;i<=n;i++)
	{
		for (int j=1;j<=n;j++)printf("%3d",a[i][j]);
		printf("\n");	
	}	
	return 0;
}
//此代码其实与王某的思路一样，做法也一样，都是一个while循环里赋值一圈，但此解析简洁明了，王某的思想从此也得到了升华。